home *** CD-ROM | disk | FTP | other *** search
/ Delphi Informant Complete 1995 - 2000 / Delphi Informant Complete 1995 to 2000.iso / Delphi Informant Magazine Complete Works SOURCE CODE 1998.rar / 1998 / Sep / di9809am / Compont / TAPIcomp.pas < prev   
Pascal/Delphi Source File  |  1998-06-27  |  39KB  |  1,026 lines

  1. {+--------------------------------------------------------------------------+
  2.  | Component:   TkkamTAPI
  3.  | Created:     6/3/98 6:35:50 PM
  4.  | Author:      Alan Moore and Ken Kyler
  5.  |              developed for article in Delphi Informant; September 1998
  6.  | Copyright    1998, all rights reserved.
  7.  | Description: TAPI non-visual component for basic Telephony functionality
  8.  | Version:     1.2
  9.  | Modification History:  Modifications by Ken Kyler and Alan Moore
  10.  +--------------------------------------------------------------------------+}
  11. unit TAPIcomp;  { TkkamTAPI component. }
  12. { Created 6/3/98 6:35:51 PM }
  13. { Eagle Software CDK, Version 3.02 Rev. F }
  14. { Version 1.1 completed 6/25/98 }
  15. { Version 1.2 completed 6/27/98 }
  16.  
  17. interface
  18.  
  19. uses
  20.   Windows, SysUtils, Messages, Classes, Graphics, Controls, Forms,
  21.   Dialogs, Tapi, Menus, StdCtrls, ExtCtrls;
  22.  
  23. type
  24.   // Thread Action Type
  25.   TThreadAction = (taSuspend, taResume, taTerminate);
  26.  
  27.   // Comm Event Type
  28.   TCommEvent = (tceDSR, tceDTR, tceCTS, tcePORT);
  29.  
  30.   // Event Types
  31.   TTapiUpdateEvent = procedure(sender : TObject; UpdateList : TStringList)
  32.      of object;
  33.   TCommThreadEvent = procedure(sender : TObject; ThreadAction : TThreadAction)
  34.      of object;
  35.   TCommEventProc = procedure (sender : TObject; ACommEvent : TCommEvent;
  36.                           AStatus : integer) of object;
  37.  
  38.   // Our Thread Class moved from separate unit
  39.   type
  40.   TCommStatus = class(TThread)
  41.   private
  42.     { Private declarations }
  43.     ThePort : THandle;
  44.     function GetPort : THandle;
  45.     procedure SetPort(Value : THandle);
  46.   protected
  47.     TheOwner: TComponent;
  48.     property APort : THandle
  49.       read  GetPort
  50.       Write SetPort;
  51.       procedure Execute; override;
  52.       procedure TriggerTapiCommEvent(Sender : TObject;
  53.                           CommEvent : TCommEvent; Status : integer);
  54.     public
  55.       constructor Init(Owner : TComponent; Suspended : Boolean;
  56.                         PortRead : THandle);
  57.   end;
  58.  
  59.   // constants for thread and modem lights
  60.   const
  61.   off = 0;
  62.   red = 1;
  63.   yellow = 2;
  64.   green = 3;
  65.  
  66. type
  67.   // Main TAPI Class
  68.   TkkamTAPI = class(TComponent)
  69.   private
  70.     FAnswerCalls: Boolean;
  71.     FPulseDialing: boolean;
  72.     FCountryCode: integer;
  73.     FVersion: integer;
  74.     { Private declarations }
  75.     FLineCallParams: TLineCallParams;
  76.     FLineTranslateOptions: DWord;
  77.     FExt: TLINEEXTENSIONID;
  78.     FlpTranslateOutput: LPLINETRANSLATEOUTPUT;
  79.     FPort: THandle;
  80.     FTAPI_Initialized: Boolean;
  81.     FAutoSelectLine: Boolean;
  82.     FDev: Integer;
  83.     FPhoneNumber: String;
  84.     FMediaMode: DWord;
  85.     FBearerMode: DWord;
  86.     FLineIsOpen: Boolean;
  87.     FAnswserCalls : boolean;
  88.     FOnCreateCallManager: TTapiUpdateEvent;
  89.     FOnShutdownManager: TTapiUpdateEvent;
  90.     FOnDestroyCallManager : TTapiUpdateEvent;
  91.     FOnFreeCallManager: TTapiUpdateEvent;
  92.     FOnEnumerateDevices: TTapiUpdateEvent;
  93.     FOnOpenLine: TTapiUpdateEvent;
  94.     FOnDial: TTapiUpdateEvent;
  95.     FOnCommThreadEvent: TCommThreadEvent;
  96.     FOnTriggerCommEvent: TCommEventProc;
  97.     FOnTAPIInit: TNotifyEvent;  { Defined in Classes unit. }
  98.     // The next three events will usually not need to be used but are included
  99.     // in case you want to take additional steps after these changes occur.
  100.     // Generally, you should communicate from the calling application to this
  101.     // component to effect each of these changes
  102.     FOnPhoneNumberChange: TNotifyEvent;  { Defined in Classes unit. }
  103.     FOnChangeMediaMode: TNotifyEvent;  { Defined in Classes unit. }
  104.     FOnChangeBearerMode: TNotifyEvent;  { Defined in Classes unit. }
  105.     function ReadPhoneNumber :  string;
  106.     procedure WritePhoneNumber(NewPhoneNumber : String);
  107.    protected
  108.     { Protected declarations }
  109.     InitResults : TStringList;
  110.     DeviceList: TStringList;
  111.     ShutdownResults: TStringList;
  112.     CreateManagerResults : TStringList;
  113.     DialResults: TStringList;
  114.     { Event triggers: }
  115.     procedure TriggerCreateCallManagerEvent; virtual;
  116.     procedure TriggerShutdownManagerEvent; virtual;
  117.     procedure TriggerDestroyCallManagerEvent; virtual;
  118.     procedure TriggerEnumerateDevicesEvent; virtual;
  119.     procedure TriggerTAPIInitEvent; virtual;
  120.     procedure TriggerOpenLineEvent; virtual;
  121.     procedure TriggerDialEvent; virtual;
  122.     procedure TriggerPhoneNumberChangeEvent; virtual;
  123.     procedure TriggerChangeMediaModeEvent; virtual;
  124.     procedure TriggerChangeBearerModeEvent; virtual;
  125.     procedure TriggerCommThreadEvent(ThreadAction : TThreadAction); virtual;
  126.     procedure TriggerCommEvent(Sender : TObject;
  127.                                ACommEvent : TCommEvent; AStatus : integer);
  128.   public
  129.     { Public declarations }
  130.     CommStatusThread : TCommStatus;
  131.     constructor Create(AOwner: TComponent); override;
  132.     destructor Destroy; override;
  133.     function TapiInitialize: Boolean;
  134.     procedure EnumerateDevices;
  135.     function ShutdownManager: Boolean;
  136.     function CreateCallManager: Boolean;
  137.     function CheckLineIsOpen: boolean;
  138.     procedure ChangePhoneNumber(NewPhoneNumber : string);
  139.     function Dial: String;
  140.     procedure ChangeMediaMode(MediaModeSelected : Integer);
  141.     procedure ChangeBearerMode(BearerModeSelected : Integer);
  142.     procedure ShowLineTranslateDialog(APhoneNum : string; AHandle :  THandle);
  143.     function OpenLine(AcceptCalls : boolean; var OpenMsg : string): boolean;
  144.     property APort : THandle read FPort Write FPort;
  145.     // Use a MaskEdit on main form to enter phone number with the following
  146.     // edit mask:  !9 \(999\) 000-0000;1;_
  147.     property PhoneNumber: String read ReadPhoneNumber write WritePhoneNumber;
  148.     property TAPI_Initialized: Boolean read FTAPI_Initialized write
  149.              FTAPI_Initialized;
  150.     property MediaMode: DWord read FMediaMode write FMediaMode;
  151.     property Dev: Integer read FDev write FDev;  { Public }
  152.     property LineIsOpen : boolean read FLineIsOpen Write FLineIsOpen;
  153.   published
  154.     { Published properties and events }
  155.     property AutoSelectLine: Boolean read FAutoSelectLine write FAutoSelectLine
  156.              default true;
  157.     property AnswerCalls : boolean read FAnswerCalls Write FAnswerCalls;
  158.     property PulseDialing : boolean read FPulseDialing Write FPulseDialing;
  159.     property OnCreateCallManager: TTapiUpdateEvent read FOnCreateCallManager write
  160.              FOnCreateCallManager;
  161.     property OnShutdownManager: TTapiUpdateEvent read FOnShutdownManager
  162.              write FOnShutdownManager;
  163.     property OnDestroyCallManager: TTapiUpdateEvent read FOnDestroyCallManager
  164.              write FOnDestroyCallManager;
  165.     property OnEnumerateDevices: TTapiUpdateEvent read FOnEnumerateDevices
  166.              write FOnEnumerateDevices;
  167.     property OnTriggerCommEvent : TCommEventProc read FOnTriggerCommEvent
  168.              Write FOnTriggerCommEvent;
  169.     property OnTAPIInit: TNotifyEvent read FOnTAPIInit write FOnTAPIInit;
  170.     property OnOpenLine: TTapiUpdateEvent read FOnOpenLine write FOnOpenLine;
  171.     property OnDial: TTapiUpdateEvent read FOnDial write FOnDial;
  172.     property OnPhoneNumberChange: TNotifyEvent read FOnPhoneNumberChange
  173.              write FOnPhoneNumberChange;
  174.     property OnChangeMediaMode: TNotifyEvent read FOnChangeMediaMode
  175.              write FOnChangeMediaMode;
  176.     property OnChangeBearerMode: TNotifyEvent read FOnChangeBearerMode
  177.              write FOnChangeBearerMode;
  178.     property OnCommThreadEvent : TCommThreadEvent read FOnCommThreadEvent
  179.              Write FOnCommThreadEvent;
  180.   end;  { TkkamTAPI }
  181.  
  182.   var
  183.     LineApp: HLINEAPP;
  184.  
  185. procedure Register;
  186.  
  187. implementation
  188.  
  189. const
  190.   Ver = $00010004;  // API version accepted (1.4) [Windows 95]
  191.  
  192. // Local Variables -------------------------------------------------------------
  193. var
  194.   TapiMessages : TStringList; // local string list for TAPI results
  195.   Devices : TStringList;      // local string list for available devices
  196.   AkkamTAPI : TkkamTAPI;  // local copy of the TAPI component
  197.   LocalNumDevs : Integer;  // local copy of number of devices
  198.   ALineIsOpen : boolean;   // local copy of line open status
  199.   ALine : HLine; // local copy